﻿using System;
using System.Text;
using System.Net.Mail;
using Rendiciones.Web.infraestructura;

namespace Rendiciones.Web.usercontrols
{
    public partial class ctrlCambiarContrasena : UserControlBase
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                LimpiarErrores(pnlClave);
                txtPassword1.Focus();
            }
        }

        public void Mostrar()
        {
            if (UsuarioConectado == null)
                return;
            lblNombreUsuario.Text = UsuarioConectado.Nombre;

            pnlClave.Attributes.Remove("style");
            pnlClave.Attributes.Add("style", "width:400px;display:block;");
            mpeClave.Show();
        }

        protected void BtnCambiarClick(object sender, EventArgs e)
        {
            if (UsuarioConectado == null)
                return;

            if (string.IsNullOrEmpty(txtPassword1.Text) && string.IsNullOrEmpty(txtPassword2.Text))
            {
                MuestraMensajeError(pnlClave, "<b>Error: </b>Ingrese contraseñas");
                return;
            }
            if (string.IsNullOrEmpty(txtPassword1.Text) || string.IsNullOrEmpty(txtPassword2.Text) || (txtPassword1.Text.Trim() != txtPassword2.Text.Trim()))
            {
                MuestraMensajeError(pnlClave, "<b>Error: </b>Las contraseñas no coinciden");
                return;
            }
            if (string.IsNullOrEmpty(txtPassword1.Text.Trim()) || string.IsNullOrEmpty(txtPassword2.Text.Trim()) || (txtPassword1.Text.Trim() != txtPassword2.Text.Trim()))
            {
                MuestraMensajeError(pnlClave, "<b>Error: </b>Las contraseñas no coinciden");
                return;
            }
            if (txtPassword1.Text.Trim().Length < 6)
            {
                MuestraMensajeError(pnlClave, "<b>Error: </b>El largo de la contraseña no puede ser menor a caracteres");
            }

            try
            {
                var usuario = Modulos.Rendiciones.Usuarios.Leer(UsuarioConectado.IdUsuario);
                if (usuario == null) { MuestraMensajeError(pnlClave, "<b>Error: </b>No se encontró nombre de usuario o correo electrónico, intente nuevamente, sí no se encuentra registrado pongase en contacto con el administrador del sistema"); return; }

                usuario.Password = usuario.Password2 = txtPassword1.Text;
                usuario.ActualizarPassword = true;
                Modulos.Rendiciones.Usuarios.Guardar(ref usuario);

                var body = new StringBuilder();
                body.Append("<!DOCTYPE html PUBLIC '-//W3C//DTD XHTML 1.0 Transitional//EN' 'http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd'>");
                body.Append("<html xmlns='http://www.w3.org/1999/xhtml'>");
                body.Append("<head>");
                body.Append("    <title>Clave de Acceso - Rendiciones Delta</title>");
                body.Append("</head>");
                body.Append("<body style='font-size:14px; font-family:Verdana;'>");
                body.Append("    <table width='800px'>");
                body.Append("        <tr>");
                body.Append("            <td  colspan='2'>");
                body.Append("               Este mensaje ha sido generado por Rendiciones Delta. Favor no responder");
                body.Append("            </td>");
                body.Append("        </tr>");
                body.Append("        <tr>");
                body.Append("            <td  colspan='2'>");
                body.Append("                Se ha realizado la recuperación de su clave de acceso.");
                body.Append("            </td>");
                body.Append("        </tr>");
                body.Append("        <tr>");
                body.Append("            <td  colspan='2'>");
                body.Append("              Su nueva clave de acceso es:");
                body.Append("            </td>");
                body.Append("        </tr>");
                body.Append("        <tr>");
                body.Append("            <td  colspan='2'><b>");
                body.Append(String.Format("                {0}", usuario.Password));
                body.Append("            </td></b>");
                body.Append("        </tr>");
                body.Append("        <tr>");
                body.Append("            <td  colspan='2'>");
                body.Append("                Saludos,");
                body.Append("            </td>");
                body.Append("        </tr>");
                body.Append("        <tr>");
                body.Append("            <td  colspan='2'></br></br>");
                body.Append("                Rendiciones Delta");
                body.Append("            </td>");
                body.Append("        </tr>");
                body.Append("    </table>");
                body.Append("</body>");
                body.Append("</html>");

                var from = Configuracion.ServerSmtpMail;
                var to = usuario.Email;
                const string subject = "Clave de Acceso - Rendiciones Delta";
                var mail = new MailMessage(from, to, subject, body.ToString()) { IsBodyHtml = true };
                var smtp = new SmtpClient(Configuracion.ServerSmtpServer);
                smtp.Send(mail);
                mpeClave.Hide();
                //MostrarOk("Se ha enviado un correo electrónico a " + to + " con su nueva contraseña, favor revise su casilla de entrada", "");
            }
            catch (Exception exception)
            {
                MuestraMensajeError(pnlClave, "<b>Error Interno: </b>" + exception.Message + ". Pongase en contacto con el administrador del sistema");
            }
        }

        protected void BtnCancelarClick(object sender, EventArgs e)
        {
            LimpiarErrores(pnlClave);
            mpeClave.Hide();
        }
    }
}